【学习笔记】BSGS & exBSGS
BSGS
$O(\sqrt{p})$ 求解关于 $x$ 的高次同余方程 $a^x \equiv n \pmod{p}$,其中 $p$ 为质数。
由 $a^{\phi(p)} \equiv 1 \pmod{p}$ 得 $x \in [0, p - 1)$。设 $x = i k - j$, 则 $(a^k)^i \equiv b a^j \pmod{p}$,取 $k = \sqrt{p}$,对于 $j \in [0, k)$ 把 $b * a^j \pmod{p}$ 存入 hash 表,枚举 $i \in [0, k)$,查找 hash 表中是否有当前的 $(a^k)^i \pmod{p}$。
exBSGS
$p$ 非质的版本,$(a, p) > 1$。考虑转化为 $(a, p) = 1$。
展开为 $a \cdot a^{x - 1} + p * y = b$,必须要 $(a, p) \mid b$,$a^{x - 1}$ 和 $y$ 才有整数解。
令上柿变为:$a^{x - 1} \cdot \frac{a}{(a, p)} \equiv \frac{b}{(a, p)} \pmod{\frac{p}{(a, p)}}$。
此时如果 $(a^{x - 1}, \frac{p}{(a, p)}) = 1$,就直接用 BSGS 解 $a^{x - 1} \equiv \frac{\frac{b}{(a, p)}}{\frac{a}{(a, p)}} \pmod{\frac{p}{(a, p)}}$(注意这里的模数可能非质,不能用费马小定理求逆元,只能 exgcd 啦);否则递归分解直到 $(a’, p’) = 1$。
在递归过程中若出现 $(a’, p’) ∤ \frac{\frac{b}{(a, p)}}{\frac{a}{(a, p)}}$,直接无解。注意:有特例:若 $\frac{\frac{b}{(a, p)}}{\frac{a}{(a, p)}} \equiv 1 \pmod{\frac{p}{(a, p)}}$,表示 $a^{x - k} \equiv 1 \pmod{p}$(递归了 $k$ 层),即 $a^{x - k} a^k \equiv 1 b \pmod{p}$,$k$ 为解。
template
1 | // luogu_4195 |